<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
            
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
            
  <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
            
  <meta name="Author" content="Michael Reusch">
  <title>PCItree userguide and installation</title>
</head>
  <body text="#000000" bgcolor="#ccffff" link="#000099" vlink="#ff6600" alink="#cc0000" background="gfx/bg.jpg" nosave="">
   &nbsp;   
<center>  
<table border="0" cols="5" width="100%">
   <tbody>
      <tr>
   <td bgcolor="#3333ff">               
      <center><b><font face="Arial,Helvetica"><font color="#ffff00"><a href="http://www.pcitree.de" style="text-decoration: none; color: rgb(255,255,0); ">
  PCItree home</a>
        </font></font></b></center>
   </td>
    <td bgcolor="#33ccff">               
      <center><b><font face="Arial,Helvetica"><font color="#ffff00">userguide</font></font></b></center>
   </td>
    <td bgcolor="#3333ff">               
      <center><b><font face="Arial,Helvetica"><font color="#ffff00"><a href="linkspci.htm" style="text-decoration: none; color: rgb(255,255,0); ">
  PCI&nbsp; links</a>
        </font></font></b></center>
   </td>
    <td bgcolor="#3333ff">               
      <center><b><font face="Arial,Helvetica"><font color="#ffff00"><a href="register.htm" style="text-decoration: none; color: rgb(255,255,0); ">
  registration</a>
        </font></font></b></center>
   </td>
    <td bgcolor="#3333ff">               
      <center><b><font face="Arial,Helvetica"><font color="#ffff00"><a href="register.htm" style="text-decoration: none; color: rgb(255,255,0); ">
  download</a>
        </font></font></b></center>
   </td>
   </tr>
    <tr>
   <td bgcolor="#33ccff">               
      <center><b><u><font face="Arial,Helvetica"><font color="#ffff00"><a href="#installation" style="text-decoration: none; color: rgb(255,255,0); ">
  Installation</a>
        </font></font></u></b></center>
   </td>
    <td bgcolor="#33ccff">               
      <center><b><u><font face="Arial,Helvetica"><font color="#ffff00"><a href="#UG" style="text-decoration: none; color: rgb(255,255,0); ">
  Userguide</a>
        </font></font></u></b></center>
   </td>
    <td align="Center" bgcolor="#33ccff"><b><u><font face="Arial,Helvetica"><font color="#ffff00"><a href="ptscrshot.htm" style="text-decoration: none; color: rgb(255,255,0); ">
  screenshots</a>
        </font></font></u></b></td>
    <td><br>
        </td>
    <td><br>
        </td>
   </tr>
         
  </tbody>  
</table>
  </center>
      
<center>   
<h1> <a name="top"></a>
  </h1>
  </center>
      
<table cols="5" width="100%">
   <tbody>
      <tr>
   <td width="10%"><font face="Arial,Helvetica">&nbsp;</font></td>
    <td><img src="gfx/tree.gif" alt="pcitree icon" nosave="" height="38" width="40" align="Center">
        </td>
    <td width="40%"><b><i><font face="Arial,Helvetica"><font size="+4">PCItree</font></font></i></b></td>
    <td>               
      <div align="Right"><a href="ptscrshot.htm#pcitree"><img src="gfx/pv_1s.gif" alt="pcitree" nosave="" height="89" width="85" align="Center">
        </a>
        </div>
   </td>
    <td><br>
        </td>
   </tr>
         
  </tbody>  
</table>
      
<p><b><font face="Arial,Helvetica"><font size="-1">PCItree displays all components 
 of the PCIbus as a tree structure. The Config Space of devices can be&nbsp; 
 read and edited. If a device features io or memory space it can be read and
edited as well (but be carefull! it can hang or even damage your hardware!).</font></font></b>
   </p>
   
<p> </p>
   
<hr size="5" width="100%">   
<h2> <a name="installation"></a>
  <font face="Arial,Helvetica">Installation:</font></h2>
   <font face="Arial,Helvetica">&nbsp;<font size="-1">&nbsp;&nbsp; make sure 
 that the following files are in the same directory as pcitree.exe:</font></font>
     
<ul>
   <li> <font face="Arial,Helvetica"><font size="-1">gbhlp.dll</font></font></li>
       <li> <font face="Arial,Helvetica"><font size="-1">hlp.vxd</font></font></li>
    <li> <font face="Arial,Helvetica"><font size="-1">(pcidevs.txt) if present
 VIDs and DIDs are taken from this list</font></font></li>
     
</ul>
   <font face="Arial,Helvetica"><font size="-1">&nbsp;&nbsp;&nbsp; <b>Win 
NT/2000</b> : hlp.sys must be copied to \WINNT\SYSTEM32\DRIVERS directory.</font></font><font face="Arial,Helvetica"><font size="-1"><br>
  &nbsp;&nbsp;&nbsp; <b>Windows XP</b>: hlp.sys must be copied to \WINDOWS\SYSTEM32\DRIVERS
 directory.<br>
 <br>
 &nbsp;&nbsp;&nbsp; You need administrator rights.<br>
 <br>
  </font></font>  
<hr size="5" width="100%"><br>
     
<h2> <a name="UG"></a>
  <font face="Arial,Helvetica">User Guide:</font></h2>
      
<ul>
   <li> <font face="Arial,Helvetica"><a href="#tree">tree list</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#Config%20Space">Config Space
 Dump</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#edit%20ConfReg">edit ConfReg</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#show%20INT">show INT routing</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#show%20Mem">show Mem Map</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#ResetBridge">Reset PCI bridge</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#BARspace">BAR space</a>
      </font></li>
    <li> <font face="Arial,Helvetica"><a href="#BAR%20space%20Dialog">BAR 
space Dialog window</a>
      </font></li>
          
  <ul>
   <li> <font face="Arial,Helvetica"><a href="#editmemory">edit memory</a>
        </font></li>
    <li> <font face="Arial,Helvetica"><a href="#memcopy">mem copy</a>
        </font></li>
    <li> <font face="Arial,Helvetica"><a href="#memtest">mem test</a>
        </font></li>
    <li> <font face="Arial,Helvetica"><a href="#loadfile">load file</a>
        </font></li>
    <li> <font face="Arial,Helvetica"><a href="#savefile">save file</a>
        </font></li>
         
  </ul>
    <li> <font face="Arial,Helvetica"><a href="#Concerns">Concerns</a>
      </font></li>
     
</ul>
      
<h4> <a name="tree"></a>
  <font face="Arial,Helvetica">tree list:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">pcitree scans the PCIbus
of  the host PC and displays the found components</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">as a tree. components are
found  if a read of DID and VID doesn't return 0xffffffff.</font></font>
  
<p><font face="Arial,Helvetica"><font size="-1">last PCI bus number: The value
of the highes PCIbus number is displayed</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;right above the tree 
pane</font></font>  </p>
   
<p><font face="Arial,Helvetica"><font size="-1">b.d.f : Each PCI component 
 has an integer number for bus, device and function.</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">direct select: in case you 
 think not all components in the PCIbus system are found:</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;any b.d.f can be choosen 
 directly by the three spin controls in the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;direct select box. A 
config read is done for this b.d.f and the result is</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;displayed in the Config 
 Space Dump.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; If for a choosen b.d.f
 a PCI component exists it is highlightet in the tree pane.</font></font>
 </p>
   
<p><font face="Arial,Helvetica"><font size="-1"><b>++</b> expands all levels 
 of the tree</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1"><b>--</b> collapses all levels
 of the tree</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1"><b>refresh tree</b> rescans 
the whole PCIbus</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1"><b>save tree</b> writes the
 tree structure to a file</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1"><b><a href="#ResetBridge">
reset  bridge</a>
  </b> resets the secondary PCIbus of a PPB</font></font> </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="Config Space"></a>
  <font face="Arial,Helvetica">Config Space Dump:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">use BIOS int checkbox:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;type 1 access uses IO
 ports to write/read the config space (default)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;type 0 access uses BIOS
 INT 13 calls</font></font>   
<p><font face="Arial,Helvetica"><font size="-1">Nr of ConfRegs:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;16 : config space from
 adress 0 to 0x3f is read (default)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;64 : config space from
 adress 0 to 0xff is read</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">refresh dump<img src="gfx/smiley.gif" nosave="" height="35" width="34" align="Center">
  &nbsp; : rereads the config space of the device and displays it</font></font>
   </p>
   
<p><font face="Arial,Helvetica"><font size="-1">If a component is selected 
 in the tree the register contents of its configuration</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">space (16 or 64 dwords) are
 displayed in the lower right window.</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">If a BAR is used (value != 
 0) it is indicated wether its memory or io space.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;You can <a href="#BARspace">
  double click on a BAR</a>
   to view/edit the memory/io space</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;You should know what 
happens if you read memory/io space !!</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">The following information 
 is extracted and decoded from the config space:</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;VendorID:&nbsp;&nbsp; 
value &amp; decoded</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;DeviceID:&nbsp;&nbsp; 
value</font></font>  <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;Subsys VID:&nbsp;&nbsp; 
 value &amp; decoded</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;Subsys ID :&nbsp;&nbsp; 
 value</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;Base/Sub Class code:&nbsp; 
 value &amp; decoded</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;Interrupt Pin/Line:&nbsp; 
 decoded</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;revision number:&nbsp; 
 value</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">you can click and double click
on a Config Space Register in the list box</font></font> </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
    <br>
  &nbsp;   
<h4> <a name="edit ConfReg"></a>
  <font face="Arial,Helvetica">edit ConfReg:</font></h4>
   <font face="Arial,Helvetica"><font size="-1"><font color="#ff0000">you 
should  not edit a Configuration register</font> ! unless you know what you 
do.</font></font>    
<p><font face="Arial,Helvetica"><font size="-1">if you click on a Config register
in the list box its DWORD contents is displayed</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">in the edit box. You can modify
 this value (the 1st character must be an x). The</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">string will be scanned by
sscanf(str,  "x%X", &amp;data).</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">Write ConfReg writes the DWORD
value of the edit box to the Config register.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; The sscaned value is
 displayed below the edit box (for feedback).</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">refr after wr. refreshes the
dump after the Write Confreg</font></font> </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
    <br>
  &nbsp;   
<h4> <a name="show INT"></a>
  <font face="Arial,Helvetica">show INT routing: <a href="gfx/ptint.gif">
see</a>
  </font></h4>
   <font face="Arial,Helvetica"><font size="-1">this button opens a <a href="ptscrshot.htm#introut">
  window</a>
   with a map of the PCI interrupt routing. The routing</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">information is taken from
the  config spaces of all PCI components (byte registers</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">with adress x3C and x3D).</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">If a PCI component has a INT
 pin it is routed to one of the 15 INT lines of the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">host. Shared interrupts are
 possible.</font></font>   
<p><font face="Arial,Helvetica"><font size="-1">A component with a INT pin 
 is displayed as "X(b.d.f)DDDD.VVVV" where X is one of</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">the INT pins INTA to INTD. 
b.d.f is bus.device.function number. DDDD is DeviceID</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;and VVVV is VendorID.</font></font>
   </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="show Mem"></a>
  <font face="Arial,Helvetica">show Mem Map:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">this button opens a <a href="ptscrshot.htm#memmap">
  window</a>
   with a map of the devices' io/memory spaces. The address</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">information is taken from
the  BARs of the config spaces of all PCI components.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">The first column displays
the  PCI address. If a BAR falls into the this address</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">range it is listed in the
next  columns. A device entry has the format</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">"BARx(b.d.f)DDDD.VVVV" where 
 x is a number one of device's BAR. b.d.f is</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">bus.device.function number. 
DDDD is DeviceID and VVVV is VendorID.</font></font>   
<p><font face="Arial,Helvetica"><font size="-1">Note: the range of the BAR 
 space is not derieved because it needs a READ-WRITE-READ-</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">WRITE sequence to the BAR
which  can cause malfunctions of the PCI system !!</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">(see "BAR space" below)</font></font>
   </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
    <br>
  &nbsp;   
<h4> <a name="ResetBridge"></a>
  <font face="Arial,Helvetica">Reset PCI bridge:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">you can do a reset on the 
secondary  PCIbus of a PCI to PCI bridge.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">After the reset is performed 
 the configuration registers of the devices behind the bridge are restored 
 with their old values.<br>
  During the reset process NO device driver should access the involved devices
 because the BARs become temporarily 0.<br>
  <br>
  </font></font>   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
    <br>
  &nbsp; <br>
  &nbsp;   
<h4> <a name="BARspace"></a>
  <font face="Arial,Helvetica">BAR space:</font></h4>
   <font face="Arial,Helvetica">&nbsp;<font size="-1">You can double click
 on a BAR in the Config Space list to view/edit the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; memory/io space</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;<b><font color="#ff0000">
  You should know what happens if you read memory/io space !!</font></b></font></font>
     
<p><font face="Arial,Helvetica"><font size="-1">&nbsp;Only 32 bit adress space
is supported.</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">BAR space detection:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">If you click <b>YES</b> in 
the message box the following happens:</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; the BAR in the ConfigSpace 
 is read and stored</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; the BAR is written
with  0xffffffff (!!)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; the BAR is read. With
 the read value the size of the memory/io space is determined</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; the BAR is written
with  the stored BAR value</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; a linear adress of
1Kbyte  is mapped to the physical adress (the contents of the BAR)</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; a new Dialog window 
with a list box is opened</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;&nbsp; (In some cases 
the described BAR detection can cause malfunctions of the PCI system because 
the BAR is temporarily changed !!)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">If you click <b>NO</b> then 
the described procedure is not done. Instead a size of 1 MByte is assumed.</font></font>
   </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="BAR space Dialog"></a>
  <font face="Arial,Helvetica">BAR space Dialog window:&nbsp;</font><a href="ptscrshot.htm#barspace"><img src="gfx/ptbar_s.gif" nosave="" height="110" width="110" align="Texttop">
  </a>
  </h4>
   <font face="Arial,Helvetica"><font size="-1">auto read memory:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; the content of the
display  range is not read when the Dialog window is opened.</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; If you select an address
 in the list box the dword of the address is read.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; If you want to read 
the range of the memory check the button auto read memory and push refresh 
view.</font></font>    
<p><font face="Arial,Helvetica"><font size="-1">Display range:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; 128 Bytes:&nbsp; only
 the first 128 Bytes of the selected 1Kbyte range are displayed</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;&nbsp; and refreshed 
(faster cont. cycles &amp; shorter cycles to</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;&nbsp; view with a logic
 analyzer)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;1024 Bytes:&nbsp; the
 whole 1K range is displayed in the list box (default)</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">If the size of the memory/io 
 space is smaller only this space is displayed.</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">select view range:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; If the size of the
memory/io  space is bigger than 1Kbyte then you can select another</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; 1Kbyte block to be
displayed  in the list box. Just move the scrollbars for KB range</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; and MB range.</font></font>
   <br>
  &nbsp; </p>
   
<p><font face="Arial,Helvetica"><font size="-1">list box contents:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;1st col: DWORD contents 
 (MSbyte:LSbyte)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;2nd col: address offset 
 in the memory/io space</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;3rd col: ASCII character 
 of the 4 bytes (LSbyte:MSbyte)</font></font> <br>
  &nbsp; </p>
   
<p><font face="Arial,Helvetica"><font size="-1">refr. view&nbsp;<img src="gfx/smiley.gif" nosave="" height="35" width="34" align="Center">
   : rereads the selected 1Kbyte (or 128 Byte) block and displays it in the</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; list box</font></font>
   </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
    <br>
  &nbsp;   
<h4> <a name="editmemory"></a>
  <font face="Arial,Helvetica">edit memory:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">select one DWORD in the list 
 box or</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">select a range of DWORDs in
 the list box</font></font>   
<p><font face="Arial,Helvetica"><font size="-1">the first DWORD of the selected 
 range is displayed in the edit box.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">Physical address and number 
of selected DWORDs are displayed at the right of the edit box.</font></font>
   </p>
   
<p><font face="Arial,Helvetica"><font size="-1">You can modify the value in
the edit box (the 1st character must be an x). The</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">string will be scanned by
sscanf(str,  "x%X", &amp;data) when the write button is pushed.</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">The sscaned value is displayed 
 below the edit box (for feedback).</font></font> </p>
   
<p><font face="Arial,Helvetica"><font size="-1">Write Memory writes the DWORD 
 value of the edit box to the selected range with</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">the following options:</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;loop on/off. continously 
 loops accesing the selected range</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; stops if button is
being  unchecked</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;toggle.&nbsp; toggles 
(inverts) every second DWORD to be written</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;count.&nbsp; increments 
 each WORD of the DWORD for the next write access</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;verify. after the selected
 range is written it is read and compared to the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; written values. If
an  error occurs (the cont. loop is stoped and) the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; false values are highlighted
 in the list box</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;refresh view after write.&nbsp;
 refreshes the whole list box after the selected</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp; range is written (and
 verified)</font></font> </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="memcopy"></a>
  <font face="Arial,Helvetica">mem copy:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">-select a range in the list 
 box that should be copied to another location</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">-push source</font></font>
 <br>
  <font face="Arial,Helvetica"><font size="-1">-select the first location 
where the source block should be copied to</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">-push destination</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">-push mem copy</font></font>
     
<p><font face="Arial,Helvetica"><font size="-1">the function memcpy( p_dest, 
 p_src, b_range ) is used to read max. 1Kbytes</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">from the selected memory/io 
space to a buffer and then write it to the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">selected destination.</font></font>
   </p>
   
<p><font face="Arial,Helvetica"><font size="-1">memcpy is expected to use 
 faster PCI transfers (bursts).</font></font> </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="memtest"></a>
  <font face="Arial,Helvetica">mem test:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">the selected 1K range or
the  whole BAR space (asked by message box) is tested:</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;the range is written 
with 0 (reset)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;the range is written 
with a counter value (every second value is inverted)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;the range is read and
 verified</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&nbsp;the number of errors 
are displayed in a message box</font></font>   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="loadfile"></a>
  <font face="Arial,Helvetica">load file:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">the content of the file is
 bytewise binary read from a file an written to the selected 1K range in
the  list box or to the whole BAR range.</font></font>   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<h4> <a name="savefile"></a>
  <font face="Arial,Helvetica">save file:</font></h4>
   <font face="Arial,Helvetica"><font size="-1">the selected 1K range (or 
the  whole BAR range) is bytewise binary dumped to a file</font></font> 
 
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
<hr size="5" width="100%">   
<hr size="5" width="100%">   
<h2> <a name="Concerns"></a>
  <font face="Arial,Helvetica">Concerns:</font></h2>
      
<p><br>
  <font face="Arial,Helvetica"><font size="-1">possible problems to get the
 BAR space:</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">----------------------------------------</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; To: Mailing List Recipients 
 &lt;pci-sig-request@znyx.com</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; cc:&nbsp; (bcc: Michael 
 Reusch/FAST Multimedia AG)</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; Subject: Re: Unruly BIOSes 
 and the Intel i960RP</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; I had a problem with
a Base Address Register in the Intel i960RP. The</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; BIOS writes FFFF FFFF 
to this register and then reads what comes back to</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; determine the size required 
 by the device. The i960 returns a value</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; based on the limit register 
 once and once only, and subsequent reads</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; from the BAR return the 
 current programmed value of BAR. The PCI</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; specification, as I read 
 it, does not preclude this behaviour.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; It would seem to be more 
 complicated to implement this behaviour as it</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; requires a register to 
keep state information, and a side effect of</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; reading in configuration 
 space is to alter this state. Still, that is</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; what happens, so I have 
 to live with it.</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; Some BIOSes, it seems, 
read the BAR twice when determining the address</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; limit. Such BIOSes are 
confused by what they see come back, and so write</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; 8000 8000 to the BAR. 
This seems to me equally bizarre. Surely 0000 0000</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; would be a more sensible 
 thing to write to a difficult BAR: this would</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; effectively disable the 
 allocation requested by that BAR ?</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; I am considering writing 
 a PCI configuration helper which runs after the</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; BIOS but before Windows 
 gets started, and straightens out anomolies such</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; as the one above.</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; Any thoughts?</font></font>
   <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt;</font></font> <br>
  <font face="Arial,Helvetica"><font size="-1">&gt; Roy Gwinn.</font></font>
   </p>
   
<div align="Right"><font face="Arial,Helvetica"><a href="#top">back to top</a>
  </font></div>
      
</body>
</html>
